using System.Collections;
using System.Collections.Generic;
using UnityEngine;


//玩家脚本
public class Player : MonoBehaviour
{

    //速度
    public float moveSpeed = 3;
    //子弹角度
    private Vector3 bullectEulerAngles;
    //子弹发射间隔
    private float timeVal;
    //被保护的无敌时间
    private float defendTimeVal = 3;
    //是否被保护
    private bool isDefended = true;



    //引用
    private SpriteRenderer sr;

    //坦克图片数组   上0 右8  下16 左24         
    public Sprite[] tankSprite;

    private void Awake()
    {
        sr = GetComponent<SpriteRenderer>();
    }

    //子弹
    public GameObject bullectPrefab;
    //爆炸
    public GameObject explosionPrefab;
    //受保护的状态
    public GameObject defendEffectPrefab;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

        //如果游戏结束
        if (PlayerMananger.Instance.isDefeat)
        {
            return;
        }

        if (isDefended)
        {
            //控制组件的展示
            defendEffectPrefab.SetActive(true);
            defendTimeVal -= Time.deltaTime;
            if (defendTimeVal <= 0)
            {
                isDefended = false;
                defendEffectPrefab.SetActive(false);
            }
        }

        //坦克移动方法
        Move();
        if (timeVal >= 0.4f)
        {
            //坦克攻击
            Attack();
        }
        else
        {
            //计时器累加
            timeVal += Time.deltaTime;
        }
    }

    // private void FixedUpdate()
    // {

    //     //如果游戏结束
    //     if (PlayerMananger.Instance.isDefeat)
    //     {
    //         return;
    //     }


    // }

    // 坦克的攻击方法
    private void Attack()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {

            //子弹产生的角度：当前坦克的角度+子弹应该旋转的角度。
            Instantiate(bullectPrefab, transform.position, Quaternion.Euler(transform.eulerAngles + bullectEulerAngles));
            timeVal = 0;
        }
    }

    //坦克移动方法
    private void Move()
    {
        //垂直移动
        float v = Input.GetAxisRaw("Vertical");

        transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
        if (v < 0)
        {
            //下
            sr.sprite = tankSprite[2];
            //坦克角度
            bullectEulerAngles = new Vector3(0, 0, -180);
        }
        else if (v > 0)
        {
            //上
            sr.sprite = tankSprite[0];
            bullectEulerAngles = new Vector3(0, 0, 0);
        }

        if (v != 0)
        {
            return;
        }

        float h = Input.GetAxisRaw("Horizontal");
        //水平移动  右 *  h轴 *  速度 *  按秒移动  * 以世界坐标轴
        transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
        if (h < 0)
        {
            //右
            sr.sprite = tankSprite[3];
            bullectEulerAngles = new Vector3(0, 0, 90);
        }
        else if (h > 0)
        {
            //左
            sr.sprite = tankSprite[1];
            bullectEulerAngles = new Vector3(0, 0, -90);
        }
    }





    //玩家坦克的死亡方法
    public void Die()
    {
        if (isDefended)
        {
            return;
        }
        //玩家生命值减少
        PlayerMananger.Instance.isDead = true;
        //产生爆炸特效
        Instantiate(explosionPrefab, transform.position, transform.rotation);
        //死亡
        Destroy(gameObject);
    }

}
